/**
 * 文档下载处理器示例 - 展示如何扩展新的下载类型
 */

import BaseDownloadHandler from './BaseDownloadHandler.js'
import DownloadCore from './DownloadCore.js'
import ChatHistory from '../ChatHistory.js'

class DocumentDownloadHandler extends BaseDownloadHandler {
  
  /**
   * 获取文档名称
   * @param {Object} document 文档对象
   * @returns {string} 文档名称
   */
  static getItemName(document) {
    if (document.name && document.name.trim() !== '') {
      return document.name
    }
    
    if (document.title && document.title.trim() !== '') {
      return document.title
    }
    
    if (document.fileName && document.fileName.trim() !== '') {
      return document.fileName
    }
    
    if (document.id) {
      return `文档 #${document.id}`
    }
    
    try {
      const url = document.downloadUrl || document.url
      if (url) {
        const urlObj = new URL(url)
        const pathParts = urlObj.pathname.split('/')
        const filename = pathParts[pathParts.length - 1]
        if (filename && filename !== '') {
          const nameWithoutExt = filename.split('.')[0]
          return nameWithoutExt || '未知文档'
        }
      }
    } catch (e) {
      console.log('无法从 URL 提取文档名称')
    }
    
    return '未知文档'
  }
  
  /**
   * 获取文档类型
   * @param {Object} document 文档对象
   * @returns {string} 文档类型
   */
  static getItemType(document) {
    return document.type ? document.type.toLowerCase() : 'document'
  }
  
  /**
   * 获取显示名称
   * @param {Object} document 文档对象
   * @returns {string} 显示名称
   */
  static getDisplayName(document) {
    const docName = this.getItemName(document)
    const author = document.author || document.creator
    const category = document.category || '文档'
    
    let displayName = docName
    if (author) {
      displayName += ` - ${author}`
    }
    if (category && category !== '文档') {
      displayName += ` (${category})`
    }
    
    return displayName
  }
  
  /**
   * 获取下载选项
   * @param {Object} document 文档对象
   * @returns {Array} 下载选项列表
   */
  static getDownloadOptions(document) {
    const options = []
    
    // 支持多种格式下载
    if (document.pdfUrl) {
      options.push({
        label: 'PDF格式',
        url: document.pdfUrl,
        type: 'PDF下载'
      })
    }
    
    if (document.docxUrl) {
      options.push({
        label: 'Word格式',
        url: document.docxUrl,
        type: 'DOCX下载'
      })
    }
    
    if (document.pptxUrl) {
      options.push({
        label: 'PowerPoint格式',
        url: document.pptxUrl,
        type: 'PPTX下载'
      })
    }
    
    if (document.xlsxUrl) {
      options.push({
        label: 'Excel格式',
        url: document.xlsxUrl,
        type: 'XLSX下载'
      })
    }
    
    // 如果没有特定格式，使用通用下载链接
    if (options.length === 0 && (document.downloadUrl || document.url)) {
      options.push({
        label: '下载文档',
        url: document.downloadUrl || document.url,
        type: '通用下载'
      })
    }
    
    return options
  }
  
  /**
   * 获取分类名称
   * @returns {string} 分类名称
   */
  static getCategory() {
    return '文档'
  }
  
  /**
   * 开始下载
   * @param {Object} document 文档对象
   * @param {string} downloadUrl 下载链接
   * @param {string} targetDir 目标目录
   */
  static startDownload(document, downloadUrl, targetDir) {
    const itemName = this.getItemName(document)
    const docType = this.getItemType(document)
    
    // 使用下载核心模块处理下载
    DownloadCore.startDownload({
      item: document,
      itemName: itemName,
      itemType: docType,
      downloadUrl: downloadUrl,
      targetDir: targetDir,
      category: 'document',
      historyHandler: null, // 文档可以考虑创建专门的历史管理器
      getDirectory: this.getDocumentDirectory.bind(this),
      getDefaultExtension: this.getDefaultExtension.bind(this)
    })
  }
  
  /**
   * 获取默认文件扩展名
   * @param {string} docType 文档类型
   * @param {string} downloadUrl 下载链接
   * @returns {string} 默认扩展名
   */
  static getDefaultExtension(docType, downloadUrl = '') {
    // 根据下载链接判断格式
    if (downloadUrl.includes('.pdf')) return '.pdf'
    if (downloadUrl.includes('.docx')) return '.docx'
    if (downloadUrl.includes('.doc')) return '.doc'
    if (downloadUrl.includes('.pptx')) return '.pptx'
    if (downloadUrl.includes('.ppt')) return '.ppt'
    if (downloadUrl.includes('.xlsx')) return '.xlsx'
    if (downloadUrl.includes('.xls')) return '.xls'
    if (downloadUrl.includes('.txt')) return '.txt'
    
    // 根据文档类型判断
    const extensions = {
      'pdf': '.pdf',
      'word': '.docx',
      'powerpoint': '.pptx',
      'excel': '.xlsx',
      'text': '.txt'
    }
    
    return extensions[docType] || '.pdf'
  }
  
  /**
   * 获取文档存储目录
   * @param {string} docType 文档类型
   * @returns {string} 目录路径
   */
  static getDocumentDirectory(docType) {
    const baseDir = '/Documents' // 基本文档目录
    
    const typeDirs = {
      'pdf': `${baseDir}/PDF`,
      'word': `${baseDir}/Word`,
      'powerpoint': `${baseDir}/PowerPoint`,
      'excel': `${baseDir}/Excel`,
      'text': `${baseDir}/Text`,
      'report': `${baseDir}/Reports`,
      'manual': `${baseDir}/Manuals`,
      'contract': `${baseDir}/Contracts`,
      'presentation': `${baseDir}/Presentations`,
      'spreadsheet': `${baseDir}/Spreadsheets`,
      'academic': `${baseDir}/Academic`,
      'legal': `${baseDir}/Legal`,
      'technical': `${baseDir}/Technical`
    }
    
    return typeDirs[docType] || `${baseDir}/Other`
  }
}

export default DocumentDownloadHandler

// 使用示例：
// import { DownloadFactory } from './download/index.js'
// import DocumentDownloadHandler from './download/DocumentDownloadHandler.js'
// 
// // 注册新的处理器
// DownloadFactory.registerHandler('document', DocumentDownloadHandler)
// 
// // 使用新类型
// DownloadManager.handleDownload('document', documentObject)